package com.myweb.dao.common;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * 
 * @TODO  基础数据库访问接口
 * @author roye
 * @date Apr 17, 2013 11:44:27 AM
 * @version V1.0
 */
@SuppressWarnings("unchecked")
public interface IBaseDao <T extends Serializable, PK extends Serializable>{
	
	 // -------------------- 基本检索、增加、修改、删除操作 --------------------

    // 根据主键获取实体。如果没有相应的实体，返回 null。
    public T get(PK id);

    // 根据主键获取实体。如果没有相应的实体，抛出异常。
    public T load(PK id);

    // 更新实体
    public void update(T entity);

    // 存储实体到数据库
    public void save(T entity);


    // 增加或更新实体
    public void saveOrUpdate(T entity);


    // 删除指定的实体
    public void delete(T entity);

    // 根据主键删除指定实体
    public void deleteByKey(PK id);


    // -------------------- HSQL ----------------------------------------------

    // 使用HSQL语句直接增加、更新、删除实体
    public int bulkUpdate(String queryString);

    // 使用带参数的HSQL语句增加、更新、删除实体
    public int bulkUpdate(String queryString, Object[] values);

    // 使用HSQL语句检索数据
   
	
	public List find(String queryString);

    // 使用带参数的HSQL语句检索数据
    public List find(String queryString, Object[] values);

    // 使用带命名的参数的HSQL语句检索数据
    public List findByNamedParam(String queryString, String[] paramNames,
            Object[] values);

    // 使用命名的HSQL语句检索数据
    public List findByNamedQuery(String queryName);

    // 使用带参数的命名HSQL语句检索数据
    public List findByNamedQuery(String queryName, Object[] values);

    // 使用带命名参数的命名HSQL语句检索数据
    public List findByNamedQueryAndNamedParam(String queryName,
            String[] paramNames, Object[] values);

    public void flush();

}
